1. Technical Field
The present invention relates generally to an improved data processing system and in particular to an improved method and apparatus for processing a method in a Java virtual machine. Still more particularly, the present invention relates to a method and apparatus for coordinating and controlling the simultaneous use of multiple just in time compilers in an instance of a JVM.
2. Description of Related Art
Java is an object oriented programming language and environment focusing on defining data as objects and the methods that may be applied to those objects. Java is designed to solve a number of problems in modern programming practice. Java is able to support applications for many types of data processing systems, which may contain a variety of central processing units and operating systems architectures. To enable a Java application to execute on different types of data processing systems, a compiler typically generates an architecture-neutral file format--the compiled code is executable on many processors, given the presence of the Java run time system. The Java compiler generates bytecode instructions that are non-specific to a particular computer architecture. A bytecode is a machine independent code generated by the Java compiler and executed by a Java interpreter. A Java interpreter is a module that alternately decodes and executes a bytecode. The decoding of the bytecode places the instruction into an executable form for the computer on which the code is to be executed. Then, the instruction is executed by the computer. These bytecode instructions are designed to be easy to interpret on any machine and easily translated on the fly into native machine code.
The Java virtual machine (JVM) is a virtual computer component that resides only in memory. A JVM includes components necessary to run a program on a computer, including an interpreter. The JVM allows Java programs to be executed on different platforms as opposed to only the one platform for which the code was compiled. Java programs are compiled for the JVM. In this manner, Java is able to support applications for many types of data processing systems, which may contain a variety of central processing units and operating systems architectures.
In performance critical environments, sometimes it is necessary to rely on specialized just in time (JIT) compilers to generate different just in time compiled code for different circumstances. For example, some just in time compilers are optimized for processing loops in bytecodes. In other instances, some just in time compilers may cause errors or unpredictable results in compiling bytecodes into code for use on the client computer. Currently, use of a different just in time compiler requires reinitializing the JVM with different options. No mechanism is present to provide more than one just in time compiler per instance of a JVM. Whenever a program uses Java, a new instance of the JVM is instantiated. Each JVM is designed to handle one process. Thus, it would be advantageous to have an apparatus for providing multiple just in time compilers to an instance of a JVM.